/*
AlliedBridge Content Management System
Copyright (C) 2006 AlliedBridge

This program is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software Foundation;

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.volume4.alliedbridge.model.article;

import java.io.*;
import java.net.*;
import java.sql.*;
import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;

import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.volume4.utils.ServletUtilities;

public class CreateArticle extends HttpServlet {
    
	// Should the following three String declarations be private or final?
    // Should they be in an interface?
    public String DRIVER, URL, USER, PASS, fieldName, fieldData, fileName, fileFieldName, db_url, app_root, insert_table, messageSuccess, messageFailed;
	//public String folder = "c:\\tomcat\\webapps\\modelcup\\media\\article_media\\";
    //public String tempFolder = "c:\\temp\\";
    public String folder = "/opt/tomcat5/webapps/modelcup/media/article_media/";
    public String tempFolder = "/opt/tomcat5/webapps/modelcup/media/temp/";
    public String article_id,heading,lead,content,type,img,img_alt,article_date;
    
    public void init() throws ServletException {
		ServletContext context = getServletContext();
		DRIVER = context.getInitParameter("driver");
		URL = context.getInitParameter("mc_dburl");
		USER = context.getInitParameter("mc_dbuser");
		PASS = context.getInitParameter("mc_dbpass");
	}
    
    public void processRequest (HttpServletRequest request, HttpServletResponse response)
				throws ServletException, IOException {
	response.setContentType("text/html");
	PrintWriter out = response.getWriter();
	Connection con = null;
	// These need to be moved to a properties file.
	messageSuccess = "New article successfuly created.";
	messageFailed = "New article creation failed.";

	try {
		
		DiskFileUpload upload = new DiskFileUpload();
        upload.setSizeThreshold(4096);
        upload.setRepositoryPath(tempFolder);	       
        upload.setSizeMax(-1);

        // Parse the request
        List fileItems = upload.parseRequest(request);

        // Process the uploaded fields
        Iterator iter = fileItems.iterator();
        while (iter.hasNext()) {
        FileItem item = (FileItem) iter.next();
        
        if (item.isFormField()) {	        	
        	
            if(item.getFieldName().equals("heading")) {
            	heading = ServletUtilities.filter(item.getString());                    
            }
            else if(item.getFieldName().equals("lead")) {
            	lead = ServletUtilities.filter(item.getString());
            }
            else if(item.getFieldName().equals("content")) {
            	content = ServletUtilities.filter(item.getString());
            }
            else if(item.getFieldName().equals("article_date")) {
            	article_date = item.getString();
            }
        } else {
            if(item.getFieldName().equals("img")) {
            int i = item.getName().lastIndexOf('\\');
            img = ServletUtilities.filter(item.getName().substring(i + 1));
            File savedFile = new File(folder, ServletUtilities.filter(item.getName().substring(i + 1)) );
            item.write(savedFile);
            }
          }
        }

        Class.forName(DRIVER);
		con = DriverManager.getConnection(URL,USER,PASS);
		Statement stmt = con.createStatement();		
                
		String query = 
                "INSERT INTO ab_articles_pending " + 
                "(heading, lead, content, img, img_alt, article_date)" +
                " VALUES('" + heading + "', " +
                "'" + lead + "', " +
                "'" + content + "', " +
                "'" + img + "', " + 
                "'" + heading + "', " +
                "'" + article_date + "')";

                System.out.println(query);
              
                int result = stmt.executeUpdate(query);
              
                app_root = request.getContextPath();
				response.sendRedirect(app_root + "/application/application_messages/process_result.jsp?message=" + messageSuccess);
        
} catch (SQLException ex) {
	out.println("\nERROR:------ SQLException -----\n");
        while (ex != null) {
            out.println("Message: " + ex.getMessage() + "<br>");
            out.println("SQLState: " + ex.getSQLState() + "<br>");
            out.println("ErrorCode :" + ex.getErrorCode());
            ex = ex.getNextException();
        }
    } catch (Exception e) {
        e.printStackTrace();        
} finally {
    try {	
    if (con != null)
        con.close();
	} catch (SQLException ex) {
            out.println("\nERROR:------ SQLException -----\n");
            out.println("Message: " + ex.getMessage());
            out.println("SQLState: " + ex.getSQLState());
            out.println("ErrorCode :" + ex.getErrorCode());
        }
            }
    }
    
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }    
   
}